//
//  TTLog.h
//  YuchBox
//
//  Created by Ivan on 11-10-11.
//  Copyright 2011年 __MyCompanyName__. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef enum {
    TTLogLevelInfo    = 0,
    TTLogLevelWarn,
    TTLogLevelDebug,
    TTLogLevelError,
    TTLogLevelFatal
} TTLogLevel;

#define TTLOG_LEVEL_INFO    0
#define TTLOG_LEVEL_WARN    1
#define TTLOG_LEVEL_DEBUG   2
#define TTLOG_LEVEL_ERROR   3
#define TTLOG_LEVEL_FATAL   4



#define TTLOG_PROTOTYPE(x,level)       [[TTLog sharedTTLog] TTLog:x logLevel:(level) TT__FILE__:__FILE__ TT__FUNCTION__:__FUNCTION__ TT__LINE__:__LINE__]   
#define TTLOGF_PROTOTYPE(level,x,...)  [[TTLog sharedTTLog] TTLog:[NSString stringWithFormat:x,## __VA_ARGS__] logLevel:level  TT__FILE__:__FILE__ TT__FUNCTION__:__FUNCTION__ TT__LINE__:__LINE__]   

#define TTLOG_INFO(x)   TTLOG_PROTOTYPE(x, TTLogLevelInfo)
#define TTLOG_WARN(x)   TTLOG_PROTOTYPE(x, TTLogLevelWarn)
#define TTLOG_DEBUG(x)  TTLOG_PROTOTYPE(x, TTLogLevelDebug)
#define TTLOG_ERROR(x)  TTLOG_PROTOTYPE(x, TTLogLevelError)
#define TTLOG_FATAL(x)  TTLOG_PROTOTYPE(x, TTLogLevelFatal)

#define TTLOGF_INFO(x,...)     TTLOGF_PROTOTYPE(TTLogLevelInfo,x,## __VA_ARGS__)
#define TTLOGF_WARN(x,...)     TTLOGF_PROTOTYPE(TTLogLevelWarn,x,## __VA_ARGS__)
#define TTLOGF_DEBUG(x,...)    TTLOGF_PROTOTYPE(TTLogLevelDebug,x,## __VA_ARGS__)
#define TTLOGF_ERROR(x,...)    TTLOGF_PROTOTYPE(TTLogLevelError,x,## __VA_ARGS__)
#define TTLOGF_FATAL(x,...)    TTLOGF_PROTOTYPE(TTLogLevelFatal,x,## __VA_ARGS__)

#define TTDUMP(x,y)             [TTLog TTDataDump:(x) len:(y)]

@interface TTLog : NSObject
{
    NSOutputStream *_logWriter;
    NSString       *_logFilePath;
}

+ (TTLog *)sharedTTLog;
+ (NSString *)getLogDictionaryPath;
+ (void)TTDataDump:(UInt8 *)data len:(NSInteger)len;

- (id)initSingleton;

- (void)TTLog:(NSString *)log 
     logLevel:(TTLogLevel)type   
   TT__FILE__:(const char *)TT__FILE__ TT__FUNCTION__:(const char *)TT__FUNCTION__ TT__LINE__:(int)TT__LINE__;              
@end
